home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / misc / amigem.lha / amigem / dos / packets.c < prev    next >
Encoding:
Text File  |  1995-01-05  |  1.3 KB  |  55 lines

  1.  
  2. FD3(41,void,SendPkt,struct DosPacket *packet,D1,struct Msgport *port,D2,struct MsgPort *replyport,D3)
  3. {
  4.   packet->dp_Port=replyport;
  5.   PutMsg(port,packet->dp_Link);
  6. }
  7.  
  8. typedef struct __2 { LONG L0,L1 } LONG2;
  9.  
  10. FD7(40,DLONG,DoPkt,struct MsgPort *port,D1,LONG action,D2,LONG arg1,D3,LONG arg2,D4,LONG arg3,D5,LONG arg4,D6,LONG arg5,D7)
  11. {
  12.   struct DosPacket *dp;
  13.   struct TagItem nt[1];
  14.   unsigned long r1,r2;
  15.  
  16.   nt[0].ti_Tag=TAG_END;
  17.   if(!(dp=AllocDosObject(DOS_STDPKT,nt)))
  18.   {
  19.     RETURN_DLONG(DOSFALSE,ERROR_NO_FREE_STORE);
  20.   }
  21.   dp->dp_Type=action;
  22.   dp->dp_Arg1=arg1;
  23.   dp->dp_Arg2=arg2;
  24.   dp->dp_Arg3=arg3;
  25.   dp->dp_Arg4=arg4;
  26.   dp->dp_Arg5=arg5;
  27.   if(SysBase->ThisTask->tc_Node.ln_Type==NT_PROCESS)
  28.     dp->Res2=IoErr();
  29.   if(SysBase->ThisTask->tc_Node.ln_Type==NT_TASK)
  30.   {
  31.     struct MsgPort *rp;
  32.     if(!(rp=CreateMsgPort()))
  33.     {
  34.       dp->dp_Res1=DOSFALSE;
  35.       dp->dp_Res2=ERROR_NO_FREE_STORE;
  36.     }else
  37.     {
  38.       SendPkt(dp,port,rp);
  39.       WaitPort(rp);
  40.       GetMsg(rp);
  41.       DeleteMsgPort(rp);
  42.     }
  43.   }else
  44.   {
  45.     SendPkt(dp,port,&((struct Process *)SysBase->ThisTask)->pr_MsgPort);
  46.     WaitPkt();
  47.   }
  48.   r1=dp->dp_Res1;
  49.   r2=dp->dp_Res2;
  50.   if(SysBase->ThisTask->tc_Node.ln_Type==NT_PROCESS)
  51.     SetIoErr(dp->Res2);
  52.   FreeDosObject(DOS_STDPKT,dp);
  53.   RETURN_DLONG(r1,r2);
  54. }
  55.